package br.com.jukebox.uc;

import br.com.jukebox.general.Util;
import br.com.jukebox.model.dao.ArquivoDAO;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class ArquivoUC {

    private static final String INDICE_ARTISTAS = "indiceArtistas.list";
    private static final String LISTA_INICIAL_CDS = "listaInicialCds.list";
    private static final String LISTA_MUSICA_ARTISTA = "listaArtista.list";
    
    public void teste(){
        ArquivoDAO dao = ArquivoDAO.getInstance();
        File [] homeFile = dao.getHomeFile().listFiles();
        criaListaMusicasPorArtista(homeFile[3], false);
    }
    
    /**
     * <p>Método responsável pela criação da lista de Músicas de um Artista
     * na pasta do próprio Artista.</p>
     * @param p_fileArtista File do Artista
     * @param p_atualizarLista Indicador de atualização se a lista já existir
     */
    public void criaListaMusicasPorArtista(File p_fileArtista, boolean p_isAtualizarLista){
        File [] arrayArquivos = p_fileArtista.listFiles();
        
        try{
            File file = new File(p_fileArtista.getCanonicalPath() + Util.getOSFileSeparator() + LISTA_MUSICA_ARTISTA);
            FileWriter writer = new FileWriter(file,true);
            PrintWriter saida = new PrintWriter(writer);
            
            for (int i=0; i < arrayArquivos.length; i++){
                if (arrayArquivos[i].isFile()
                        && Util.verificaStringPeloPadraoCaseInsensitive(arrayArquivos[i].getName(),"mp3$")){ //Verifica por MP3 no final do nome do Arquivo
                    saida.println(arrayArquivos[i].getName()+"<@>"+arrayArquivos[i].getCanonicalPath());
                }
            }
            saida.close();  
            writer.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    /**
     * <p>Método responsável por devolver uma lista com as músicas existentes
     * em uma pasta de um Artista</p>
     * @param p_fileArtista 
     * @return Lista de String contendo nome de cada músicas na pasta do 
     * Artista
     */
    public List<String> buscarMusicasArtistaPorFile(File p_fileArtista){
        
        File [] arrayItensEmArtista = p_fileArtista.listFiles();

        List<String> listMusicas = new ArrayList<String>();

        for(int i=0; i < arrayItensEmArtista.length; i++)
        {
            if (arrayItensEmArtista[i].isFile() && Util.verificaStringPeloPadraoCaseInsensitive(arrayItensEmArtista[i].getName(), "mp3$"))
            {
                listMusicas.add(arrayItensEmArtista[i].getName());
            }
        }
        return listMusicas;
    }
    
    /**
     * <p>Método responsável por criar o índice de Artistas contando o número
     * existente para cada inicial. Este método será utilizado quando o usuário
     * selecionar a busca por uma letra na tela do programa. Será criado na
     * Raiz do projeto um arquivo de nome "indiceArtistas.list" contendo os
     * registros.</p>
     */
    public void criarIndiceArtistasEmPastaRaiz(){
        ArquivoDAO dao = ArquivoDAO.getInstance();
        File [] arrayHomeFile = dao.getHomeFile().listFiles();
        String ultimoCaracterInicialUtilizado = "";
        int contadorDeArtistasPorLetra = 0;
        
        try{
            File file = new File(dao.getHomeFile().getCanonicalPath() + INDICE_ARTISTAS);
            FileWriter writer = new FileWriter(file,true);
            PrintWriter saida = new PrintWriter(writer);
            
            for (int i=0; i < arrayHomeFile.length; i++){
                if (arrayHomeFile[i] != null 
                        && arrayHomeFile[i].isDirectory() 
                        && i > 0 
                        && ultimoCaracterInicialUtilizado.equals(arrayHomeFile[i].getName().substring(0, 1)))
                {
                    contadorDeArtistasPorLetra++;
                }
                else
                {
                    saida.println(ultimoCaracterInicialUtilizado+"@"+contadorDeArtistasPorLetra);
                    ultimoCaracterInicialUtilizado = arrayHomeFile[i+1] != null ? arrayHomeFile[i+1].getName().substring(0, 1) : "";
                }
            }
            
            saida.close();  
            writer.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }
    
    /**
     * <p>Método responsável produzir e retornar uma lista preenchida com
     * todos </p>
     * @return 
     */
    public List<String> buscaListaArtistasNoIndicePorLetra(){
        
        return null;
    }
    
    /**
     * 
     */
    
    /*
     * 
        PrintWriter pw = new PrintWriter(new File(itemFile.getAbsolutePath()+"\\"), "ISO-8859-1");
        pw.println();

        if (item.isFile())
        {
            File arquivo = new File("d:/base.txt");  
            FileWriter writer = new FileWriter(arquivo,true);  
            PrintWriter saida = new PrintWriter(writer); 
            saida.println("testeEscritaArquivo... na linhaaaaaaaaa");  
            saida.close();  
            writer.close();  
        }
     */
}